<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Ananas Library: Класс aExtSQL</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Создано системой Doxygen 1.5.6 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Титульная&nbsp;страница</span></a></li>
      <li class="current"><a href="annotated.html"><span>Классы</span></a></li>
      <li><a href="files.html"><span>Файлы</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="annotated.html"><span>Классы</span></a></li>
      <li><a href="hierarchy.html"><span>Иерархия&nbsp;классов</span></a></li>
      <li><a href="functions.html"><span>Члены&nbsp;классов</span></a></li>
    </ul>
  </div>
</div>
<div class="contents">
<h1>Класс aExtSQL</h1><!-- doxytag: class="aExtSQL" --><!-- doxytag: inherits="AExtension" -->Предоставляет возможность использования SQL запросов в отчетах.  
<a href="#_details">Подробнее...</a>
<p>
<code>#include &lt;<a class="el" href="aextsql_8h-source.html">aextsql.h</a>&gt;</code>
<p>
<div class="dynheader">
Граф наследования:aExtSQL:</div>
<div class="dynsection">

<p><center><img src="classaExtSQL.png" usemap="#aExtSQL_map" border="0" alt=""></center>
<map name="aExtSQL_map">
</map>
</div>

<p>
<a href="classaExtSQL-members.html">Полный список членов класса</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Открытые слоты</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">QSqlSelectCursor *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaExtSQL.html#2cac6e3aca4d1673647fc4a4b72bde19">Cursor</a> () const </td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Функция фозвращает внутренний курсор, содержащий результаты выполнения последнего вызова функции ExecQuery или ExecScalar.  <a href="#2cac6e3aca4d1673647fc4a4b72bde19"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">QVariant&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaExtSQL.html#a9ad4d401e0cef48b9e441051fcc066d">Value</a> (int col) const </td></tr>

<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1b67acf4cccb87804268f8ba554b82a5"></a><!-- doxytag: member="aExtSQL::Size" ref="1b67acf4cccb87804268f8ba554b82a5" args="() const " -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaExtSQL.html#1b67acf4cccb87804268f8ba554b82a5">Size</a> () const </td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Функция получения количества записей в результате. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0a5f78c13714dfc64a0961d8f8474cba"></a><!-- doxytag: member="aExtSQL::Count" ref="0a5f78c13714dfc64a0961d8f8474cba" args="() const " -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaExtSQL.html#0a5f78c13714dfc64a0961d8f8474cba">Count</a> () const </td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Функция получения количества столбцов в результате. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaExtSQL.html#fb19fa9f0de815d4338cf9fae795a3e1">ExecQuery</a> (const QString &amp;query)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Функция для выполнения sql запроса.  <a href="#fb19fa9f0de815d4338cf9fae795a3e1"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">QVariant&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaExtSQL.html#5bde5e62d66d895e7bd3881f891127c5">ExecScalar</a> (const QString &amp;query)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Эта функция похожа на описанную выше <a class="el" href="classaExtSQL.html#fb19fa9f0de815d4338cf9fae795a3e1" title="Функция для выполнения sql запроса.">ExecQuery()</a>,.  <a href="#5bde5e62d66d895e7bd3881f891127c5"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaExtSQL.html#e15903cebb57232093d60c58b8727217">First</a> ()</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Делает первую запись результата активной.  <a href="#e15903cebb57232093d60c58b8727217"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaExtSQL.html#00d57cc1d50b40a3d957de1ba4e58c5b">Next</a> ()</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Делает следующую запись результата активной.  <a href="#00d57cc1d50b40a3d957de1ba4e58c5b"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaExtSQL.html#718bcce117f534c9bff73b4aade1bc07">Last</a> ()</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Делает последнюю запись результата активной.  <a href="#718bcce117f534c9bff73b4aade1bc07"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaExtSQL.html#995e21a5d4f0d8f65129c6add143c0df">Prev</a> ()</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Делает предыдущую запись результата активной.  <a href="#995e21a5d4f0d8f65129c6add143c0df"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">QString&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaExtSQL.html#89f8f66c521a1187860bbc70e0b57dd4">SqlFieldName</a> (<a class="el" href="classaObject.html">aObject</a> *obj, const QString &amp;userFieldName, const QString &amp;tableType=&quot;&quot;) const </td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Возвращает sql имя поля по его пользовательскому имени.  <a href="#89f8f66c521a1187860bbc70e0b57dd4"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">QString&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaExtSQL.html#cb4743860e5b83a79159524897b9f0a1">SqlTableName</a> (<a class="el" href="classaObject.html">aObject</a> *obj, const QString &amp;tableType=&quot;&quot;) const </td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Возвращает SQL имя основной или вспомогательной таблицы объекта.  <a href="#cb4743860e5b83a79159524897b9f0a1"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d14d7e82207edcb4cc4b322a35063164"></a><!-- doxytag: member="aExtSQL::SqlTableName" ref="d14d7e82207edcb4cc4b322a35063164" args="(const QString &amp;objName) const " -->
QString&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaExtSQL.html#d14d7e82207edcb4cc4b322a35063164">SqlTableName</a> (const QString &amp;objName) const </td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Еще не реализовано. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="89dd0788047f7dc32c5d3e254ebf3a3d"></a><!-- doxytag: member="aExtSQL::SqlFieldName" ref="89dd0788047f7dc32c5d3e254ebf3a3d" args="(const QString &amp;fieldName) const " -->
QString&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaExtSQL.html#89dd0788047f7dc32c5d3e254ebf3a3d">SqlFieldName</a> (const QString &amp;fieldName) const </td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Еще не реализовано. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">QString&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaExtSQL.html#edc10bd951ca71ada96f48e42d130fe0">LastError</a> () const </td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Возвращает текстовое представление последней ошибки или пустую строку, если ошибок не было.  <a href="#edc10bd951ca71ada96f48e42d130fe0"></a><br></td></tr>
<tr><td colspan="2"><br><h2>Открытые члены</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="72aa82e8316d571adf8afcef09dba287"></a><!-- doxytag: member="aExtSQL::aExtSQL" ref="72aa82e8316d571adf8afcef09dba287" args="()" -->
&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaExtSQL.html#72aa82e8316d571adf8afcef09dba287">aExtSQL</a> ()</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Конструктор класса. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="71d227551fec98f7029b74d141b52105"></a><!-- doxytag: member="aExtSQL::init" ref="71d227551fec98f7029b74d141b52105" args="(aDatabase *database)" -->
virtual int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaExtSQL.html#71d227551fec98f7029b74d141b52105">init</a> (<a class="el" href="classaDatabase.html">aDatabase</a> *database)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Функция иницализации, переопределяет функцию базового класса, создает внутренние объекты и переменные. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="f685cece464185250e185f87b29ccf6b"></a><!-- doxytag: member="aExtSQL::~aExtSQL" ref="f685cece464185250e185f87b29ccf6b" args="()" -->
&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classaExtSQL.html#f685cece464185250e185f87b29ccf6b">~aExtSQL</a> ()</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Деструктор класса. <br></td></tr>
</table>
<hr><a name="_details"></a><h2>Подробное описание</h2>
Предоставляет возможность использования SQL запросов в отчетах. 
<p>
Пример использования. Код взят из модуля экранной формы отчета "Остатки товаров". <div class="fragment"><pre class="fragment">                <span class="comment">// Oбрабатывает пользовательские нажатия на кнопки экранной формы</span>
                function on_button(name)
                {
                    <span class="keywordflow">if</span>(name == <span class="stringliteral">"report_button"</span>)
                    {
                        generate_report();
                    }
                    <span class="keywordflow">if</span>(name == <span class="stringliteral">"run_button"</span>)
                    {
                        run_report();
                    }
                }
                
                <span class="comment">// Формирует текст SQL запроса и в демонстрационных целях помещает его в поле report_text</span>
                <span class="comment">// пользовательского диалога для показа пользователю.</span>
                function generate_report()
                {
                       var cat = <span class="keyword">new</span> Catalogue(<span class="stringliteral">"Каталог товаров"</span>);
                       var reg = <span class="keyword">new</span> ARegister(<span class="stringliteral">"Главная книга"</span>);
                       var sql = <span class="keyword">new</span> SQL();
                       var innerQuery = <span class="stringliteral">"SELECT "</span>+
                                             sql.SqlFieldName(cat, <span class="stringliteral">"Наименование"</span>) + <span class="stringliteral">", "</span> +
                                             sql.SqlFieldName(cat, <span class="stringliteral">"Артикул"</span>) + <span class="stringliteral">", "</span> +
                                             sql.SqlFieldName(reg, <span class="stringliteral">"Количество"</span>) + <span class="stringliteral">" as Amount, "</span> +
                                             <span class="stringliteral">"idg "</span> +
                                             <span class="stringliteral">"FROM "</span> + sql.SqlTableName(cat) + <span class="stringliteral">" as CAT "</span> +
                                             <span class="stringliteral">"LEFT JOIN "</span> + sql.SqlTableName(reg, <span class="stringliteral">"Товар"</span> ) + <span class="stringliteral">" as SALDO "</span> +
                                             <span class="stringliteral">"on CAT.id = SALDO."</span> + sql.SqlFieldName(reg, <span class="stringliteral">"Товар"</span>) + <span class="stringliteral">" "</span> +
                                             <span class="stringliteral">"GROUP BY "</span> + sql.SqlFieldName(cat, <span class="stringliteral">"Наименование"</span>) + <span class="stringliteral">" "</span> +
                                             <span class="stringliteral">"HAVING max(SALDO.date) "</span>;
                       var groupQuery = <span class="stringliteral">"SELECT sum( Amount ) as summ, "</span>+
                                                 <span class="stringliteral">"t.idg, "</span> +
                                                  sql.SqlFieldName(cat, <span class="stringliteral">"Название группы"</span>, <span class="stringliteral">"group"</span>) + <span class="stringliteral">" as gname "</span> +
                                                 <span class="stringliteral">"FROM ("</span> + innerQuery + <span class="stringliteral">") as t "</span> +
                                                 <span class="stringliteral">"LEFT JOIN "</span> + sql.SqlTableName(cat, <span class="stringliteral">"group"</span>) + <span class="stringliteral">" as GR "</span> +
                                                 <span class="stringliteral">"on GR.id = t.idg GROUP BY t.idg"</span>;

                       var outerQuery = <span class="stringliteral">"SELECT G.gname, G.summ, E.* from ( "</span> + innerQuery + <span class="stringliteral">" ) as E "</span> +
                                                 <span class="stringliteral">"LEFT JOIN ( "</span> + groupQuery + <span class="stringliteral">" ) as G "</span> +
                                                 <span class="stringliteral">"on E.idg = G.idg"</span>;
                        Widget(<span class="stringliteral">"report_text"</span>).text = outerQuery;
                }

                <span class="comment">// Запускает на исполнение SQL запрос, сформированный функцией generate_report()</span>
                <span class="comment">// и строит отчет в OpenOffice.org Calc c использованием полученных данных.</span>
                function run_report()
                {
                       var sql = <span class="keyword">new</span> SQL();
                       <span class="keywordflow">if</span>( !sql.ExecQuery(Widget(<span class="stringliteral">"report_text"</span>).text) ) 
                       {
                           sys.Message(1,<span class="stringliteral">"you have error in your sql query:"</span> + sql.LastError());
                           <span class="keywordflow">return</span>;
                       }
                       var p = <span class="keyword">new</span> Report(<span class="stringliteral">"templ_ostatki.ods"</span>,2);
                       p.setTable(<span class="stringliteral">"templ_ostatki.ods"</span>);
                       <span class="keywordflow">if</span>(sql.First())
                       {
                            <span class="keywordflow">do</span>{
                                 p.setValue(<span class="stringliteral">"f0"</span>,sql.Value(2));
                                             p.setValue(<span class="stringliteral">"f1"</span>,sql.Value(4)); 
                                             p.setValue(<span class="stringliteral">"f2"</span>,sql.Value(0)); 
                                             p.setValue(<span class="stringliteral">"f3"</span>,sql.Value(1)); 
                                             p.exec(<span class="stringliteral">"строка"</span>);                
                            } <span class="keywordflow">while</span>(sql.Next());
                        }
                        p.setValue(<span class="stringliteral">"param"</span>, ConvertDateFromIso(Date()));
                        p.exec(<span class="stringliteral">"Текущая дата"</span>);
                        p.show();
                        p.close();
                }
</pre></div> <hr><h2>Методы</h2>
<a class="anchor" name="2cac6e3aca4d1673647fc4a4b72bde19"></a><!-- doxytag: member="aExtSQL::Cursor" ref="2cac6e3aca4d1673647fc4a4b72bde19" args="() const " -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">QSqlSelectCursor * aExtSQL::Cursor           </td>
          <td>(</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td> const<code> [slot]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Функция фозвращает внутренний курсор, содержащий результаты выполнения последнего вызова функции ExecQuery или ExecScalar. 
<p>
для использования в качестве источника данных для таблиц (QDataTable и т.д). Не удаляйте этот курсор после использования! <dl class="return" compact><dt><b>Возвращает:</b></dt><dd>Внутренний курсор.</dd></dl>
<dl class="see" compact><dt><b>См. также:</b></dt><dd><a class="el" href="classaExtSQL.html#fb19fa9f0de815d4338cf9fae795a3e1" title="Функция для выполнения sql запроса.">aExtSQL::ExecQuery()</a> <p>
<a class="el" href="classaExtSQL.html#5bde5e62d66d895e7bd3881f891127c5" title="Эта функция похожа на описанную выше ExecQuery(),...">aExtSQL::ExecScalar()</a> </dd></dl>

</div>
</div><p>
<a class="anchor" name="a9ad4d401e0cef48b9e441051fcc066d"></a><!-- doxytag: member="aExtSQL::Value" ref="a9ad4d401e0cef48b9e441051fcc066d" args="(int col) const " -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">QVariant aExtSQL::Value           </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>col</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td> const<code> [slot]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Функция получения значения столбца  текущей записи или QVariant::Invalid если случилачь ошибка или значение  меньше 0 или больше, чем количество столбцов в результате.<p>
<dl compact><dt><b>Аргументы:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>col</em>&nbsp;</td><td>(in) -</td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Возвращает:</b></dt><dd></dd></dl>
<dl class="see" compact><dt><b>См. также:</b></dt><dd><a class="el" href="classaExtSQL.html#0a5f78c13714dfc64a0961d8f8474cba" title="Функция получения количества столбцов в результате...">aExtSQL::Count()</a> </dd></dl>

</div>
</div><p>
<a class="anchor" name="fb19fa9f0de815d4338cf9fae795a3e1"></a><!-- doxytag: member="aExtSQL::ExecQuery" ref="fb19fa9f0de815d4338cf9fae795a3e1" args="(const QString &amp;query)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool aExtSQL::ExecQuery           </td>
          <td>(</td>
          <td class="paramtype">const QString &amp;&nbsp;</td>
          <td class="paramname"> <em>query</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [slot]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Функция для выполнения sql запроса. 
<p>
Поддерживается только выражение select. Если случилась ошибка, возвращается false. Для перемещения по результатам используйте функции <a class="el" href="classaExtSQL.html#e15903cebb57232093d60c58b8727217" title="Делает первую запись результата активной.">First()</a>, <a class="el" href="classaExtSQL.html#00d57cc1d50b40a3d957de1ba4e58c5b" title="Делает следующую запись результата активной...">Next()</a>, <a class="el" href="classaExtSQL.html#995e21a5d4f0d8f65129c6add143c0df" title="Делает предыдущую запись результата активной...">Prev()</a>, <a class="el" href="classaExtSQL.html#718bcce117f534c9bff73b4aade1bc07" title="Делает последнюю запись результата активной...">Last()</a>. Для получения сведений об ошибке - функцией <a class="el" href="classaExtSQL.html#edc10bd951ca71ada96f48e42d130fe0" title="Возвращает текстовое представление последней...">LastError()</a>. <dl compact><dt><b>Аргументы:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>(in) - Sql запрос для выполнения. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Возвращает:</b></dt><dd>true, если запрос выполнился без ошибок.</dd></dl>
<div class="fragment"><pre class="fragment"> var sql = <span class="keyword">new</span> SQL();
       <span class="keywordflow">if</span>( !sql.ExecQuery(<span class="stringliteral">"select * from a_journ"</span>) ) 
       {
           sys.Message(1,<span class="stringliteral">"Ошибка в вашем sql запросе:"</span> + sql.LastError());
           <span class="keywordflow">return</span>;
       }
       <span class="keywordflow">if</span>(sql.First())
       {
            <span class="keywordflow">do</span>{
                 sys.Message(0, sql.Value(0));
            } <span class="keywordflow">while</span>(sql.Next());
        }
</pre></div> <dl class="see" compact><dt><b>См. также:</b></dt><dd><a class="el" href="classaExtSQL.html#5bde5e62d66d895e7bd3881f891127c5" title="Эта функция похожа на описанную выше ExecQuery(),...">aExtSQL::ExecScalar()</a> <p>
<a class="el" href="classaExtSQL.html#a9ad4d401e0cef48b9e441051fcc066d">aExtSQL::Value()</a> <p>
<a class="el" href="classaExtSQL.html#edc10bd951ca71ada96f48e42d130fe0" title="Возвращает текстовое представление последней...">aExtSQL::LastError()</a> </dd></dl>

</div>
</div><p>
<a class="anchor" name="5bde5e62d66d895e7bd3881f891127c5"></a><!-- doxytag: member="aExtSQL::ExecScalar" ref="5bde5e62d66d895e7bd3881f891127c5" args="(const QString &amp;query)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">QVariant aExtSQL::ExecScalar           </td>
          <td>(</td>
          <td class="paramtype">const QString &amp;&nbsp;</td>
          <td class="paramname"> <em>query</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [slot]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Эта функция похожа на описанную выше <a class="el" href="classaExtSQL.html#fb19fa9f0de815d4338cf9fae795a3e1" title="Функция для выполнения sql запроса.">ExecQuery()</a>,. 
<p>
но возвращает не true или false, а значение первой ячейки первой строки результата или QVariant::Invalid, если не вернулось ни одной записи или случилась ошибка. Но если вы знаете, что в результате больше чем одна запись, вы можете перемещаться по ним используя функции <a class="el" href="classaExtSQL.html#e15903cebb57232093d60c58b8727217" title="Делает первую запись результата активной.">First()</a>, <a class="el" href="classaExtSQL.html#00d57cc1d50b40a3d957de1ba4e58c5b" title="Делает следующую запись результата активной...">Next()</a> и т.д. <dl compact><dt><b>Аргументы:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>query</em>&nbsp;</td><td>(in) - Sql запрос для выполнения. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Возвращает:</b></dt><dd>Результат запроса или QVariant::Invalid</dd></dl>
<div class="fragment"><pre class="fragment">        var sql = <span class="keyword">new</span> SQL();
        var res = sql.ExecScalar(<span class="stringliteral">"select count(*) from a_journ"</span>) ) 
        sys.Message(0, res + <span class="stringliteral">"records in system journal"</span>);
</pre></div> <dl class="see" compact><dt><b>См. также:</b></dt><dd><a class="el" href="classaExtSQL.html#fb19fa9f0de815d4338cf9fae795a3e1" title="Функция для выполнения sql запроса.">aExtSQL::ExecQuery()</a> </dd></dl>

</div>
</div><p>
<a class="anchor" name="e15903cebb57232093d60c58b8727217"></a><!-- doxytag: member="aExtSQL::First" ref="e15903cebb57232093d60c58b8727217" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool aExtSQL::First           </td>
          <td>(</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [slot]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Делает первую запись результата активной. 
<p>
Вы должны сначала вызвать ExecQuery, чтобы вызов этой функции имел смысл. <dl class="return" compact><dt><b>Возвращает:</b></dt><dd>true в случае успеха</dd></dl>
<dl class="see" compact><dt><b>См. также:</b></dt><dd>aExtSQL::ExecuteQuery() </dd></dl>

</div>
</div><p>
<a class="anchor" name="00d57cc1d50b40a3d957de1ba4e58c5b"></a><!-- doxytag: member="aExtSQL::Next" ref="00d57cc1d50b40a3d957de1ba4e58c5b" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool aExtSQL::Next           </td>
          <td>(</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [slot]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Делает следующую запись результата активной. 
<p>
<dl class="return" compact><dt><b>Возвращает:</b></dt><dd>true в случае успеха</dd></dl>
<dl class="see" compact><dt><b>См. также:</b></dt><dd>aExtSQL::ExecuteQuery() </dd></dl>

</div>
</div><p>
<a class="anchor" name="718bcce117f534c9bff73b4aade1bc07"></a><!-- doxytag: member="aExtSQL::Last" ref="718bcce117f534c9bff73b4aade1bc07" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool aExtSQL::Last           </td>
          <td>(</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [slot]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Делает последнюю запись результата активной. 
<p>
<dl class="return" compact><dt><b>Возвращает:</b></dt><dd>true в случае успеха</dd></dl>
<dl class="see" compact><dt><b>См. также:</b></dt><dd>aExtSQL::ExecuteQuery() </dd></dl>

</div>
</div><p>
<a class="anchor" name="995e21a5d4f0d8f65129c6add143c0df"></a><!-- doxytag: member="aExtSQL::Prev" ref="995e21a5d4f0d8f65129c6add143c0df" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool aExtSQL::Prev           </td>
          <td>(</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [slot]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Делает предыдущую запись результата активной. 
<p>
<dl class="return" compact><dt><b>Возвращает:</b></dt><dd>true в случае успеха</dd></dl>
<dl class="see" compact><dt><b>См. также:</b></dt><dd>aExtSQL::ExecuteQuery() </dd></dl>

</div>
</div><p>
<a class="anchor" name="89f8f66c521a1187860bbc70e0b57dd4"></a><!-- doxytag: member="aExtSQL::SqlFieldName" ref="89f8f66c521a1187860bbc70e0b57dd4" args="(aObject *obj, const QString &amp;userFieldName, const QString &amp;tableType=&quot;&quot;) const " -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">QString aExtSQL::SqlFieldName           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classaObject.html">aObject</a> *&nbsp;</td>
          <td class="paramname"> <em>obj</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const QString &amp;&nbsp;</td>
          <td class="paramname"> <em>userFieldName</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const QString &amp;&nbsp;</td>
          <td class="paramname"> <em>tableType</em> = <code>&quot;&quot;</code></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td> const<code> [slot]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Возвращает sql имя поля по его пользовательскому имени. 
<p>
К каждому объекту Ананаса пользователь может добавлять свои собственные пользовательские поля. К несчастью, когда вы генерируете SQL запрос, вы должны использовать sql-ные имена полей вместо пользовательских. Данная функция помогает делать это очень просто. Все что вам нужно - создать новый объект, который будет использоваться для получения имени, определить пользовательское имя поля и таблицу (основную или одну из запасных :). См <a class="el" href="classaExtSQL.html#cb4743860e5b83a79159524897b9f0a1" title="Возвращает SQL имя основной или вспомогательной...">SqlTableName()</a> для детального описания имен и структуры таблиц. Кроме того, каждая таблица содержит системные поля для связи между объектами. Эти поля также могут быть использованы в запросе. См. документацию по каждому объекту Ананаса для детального описания. <dl compact><dt><b>Аргументы:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>obj</em>&nbsp;</td><td>(in) - Объект Ананасаю Используется в качестве контекста поиска. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>userFieldName</em>&nbsp;</td><td>(in) - Пользовательское имя поля </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>tableType</em>&nbsp;</td><td>(optional) - Тип таблицы. Для каталога таблица групп имеет синоним "group", для накопительного регистра каждая из таблиц остатков по измерению имеет сининим, совпадающий с пользовательским именем этого измерения. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Возвращает:</b></dt><dd>sql имя поля</dd></dl>
<div class="fragment"><pre class="fragment">        var sql = <span class="keyword">new</span> SQL();
        var cat = <span class="keyword">new</span> Catalogue(<span class="stringliteral">"Goods"</span>);
        sys.Message(0, sql.SqlFieldName(cat, <span class="stringliteral">"Full name"</span>); <span class="comment">// uf203</span>
        sys.Message(0, sql.SqlFieldName(cat, <span class="stringliteral">"Group name"</span>, <span class="stringliteral">"group"</span>) <span class="comment">//uf304 </span>
        var doc = <span class="keyword">new</span> Document(<span class="stringliteral">"Order"</span>);
        sys.Message(0, sql.SqlFieldName(doc, <span class="stringliteral">"Organization"</span>); <span class="comment">//uf449</span>
        var reg = <span class="keyword">new</span> ARegister(<span class="stringliteral">"Grossbuch"</span>);
        sys.Message(0, sql.SqlFieldName(reg, <span class="stringliteral">"Good"</span>); <span class="comment">// uf333</span>
</pre></div> <dl class="see" compact><dt><b>См. также:</b></dt><dd><a class="el" href="classaExtSQL.html#cb4743860e5b83a79159524897b9f0a1" title="Возвращает SQL имя основной или вспомогательной...">aExtSQL::SqlTableName()</a> </dd></dl>

<p>Перекрестные ссылки <a class="el" href="asqltable_8cpp-source.html#l01118">aDataTable::sqlFieldName()</a> и <a class="el" href="aobject_8cpp-source.html#l00211">aObject::table()</a>.</p>

</div>
</div><p>
<a class="anchor" name="cb4743860e5b83a79159524897b9f0a1"></a><!-- doxytag: member="aExtSQL::SqlTableName" ref="cb4743860e5b83a79159524897b9f0a1" args="(aObject *obj, const QString &amp;tableType=&quot;&quot;) const " -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">QString aExtSQL::SqlTableName           </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classaObject.html">aObject</a> *&nbsp;</td>
          <td class="paramname"> <em>obj</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const QString &amp;&nbsp;</td>
          <td class="paramname"> <em>tableType</em> = <code>&quot;&quot;</code></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td> const<code> [slot]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Возвращает SQL имя основной или вспомогательной таблицы объекта. 
<p>
Все объекты Ананаса, за исключением Отчетов, хранят данные в sql таблицах. Для Каталога это таблица групп и таблица элементов (осн.), для документа - таблица шапки, для журнала - всегда системная таблица системного журнала, для ИРегистра - одна таблица для хранения всех данных, для АРегистра - одна основная таблица для хранения записей об операциях (осн.) и X вспомогательных для хранения остатков по разрезам, где X - количество измерений накопительного регистра. Так что если вы хотите получить имя основной таблицы объекта, не используйте параметр  или установите его значение в "". Если вы хотите получить имя вспомогательной таблицы, установите параметру  значение "group" для группы каталога или значение пользовательского имени измерения накопительного регистра для таблицы остатков по данному измерению. <dl compact><dt><b>Аргументы:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>obj</em>&nbsp;</td><td>(in) - Объект для получения имени таблицы </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>tableType</em>&nbsp;</td><td>(optional) - Тип таблицы </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Возвращает:</b></dt><dd>sql имя таблицы</dd></dl>
<div class="fragment"><pre class="fragment">                var sql = <span class="keyword">new</span> SQL();
                var cat = <span class="keyword">new</span> Catalogue(<span class="stringliteral">"Goods"</span>);
                sys.Message(0, sql.SqlTableName(cat)); <span class="comment">//ce101</span>
                sys.Message(0, sql.SqlTableName(cat, <span class="stringliteral">""</span>)); <span class="comment">//ce101</span>
                sys.Message(0, sql.SqlTableName(cat, <span class="stringliteral">"group"</span>)); <span class="comment">//cg105</span>
                var doc = <span class="keyword">new</span> Document(<span class="stringliteral">"Order"</span>);
                sys.Message(0, sql.SqlTableName(doc)); <span class="comment">//dh130</span>
                var journ = <span class="keyword">new</span> Journal(<span class="stringliteral">"main journal"</span>);
                sys.Message(0, sql.SqlTableName(journ)); <span class="comment">// a_journ</span>
                var ireg = <span class="keyword">new</span> IRegister(<span class="stringliteral">"Info register"</span>));
                sys.Message(0, sql.SqlTableName(ireg)); <span class="comment">// ra303</span>
                var areg = <span class="keyword">new</span> ARegister(<span class="stringliteral">"Acc Register"</span>);
                sys.Message(0, sql.SqlTableName(areg)); <span class="comment">// ra330</span>
                sys.Message(0, sql.SqlTableName(areg),<span class="stringliteral">"Goods"</span>) <span class="comment">//ra330_d445</span>
</pre></div> <dl class="see" compact><dt><b>См. также:</b></dt><dd><a class="el" href="classaExtSQL.html#89f8f66c521a1187860bbc70e0b57dd4" title="Возвращает sql имя поля по его пользовательскому...">aExtSQL::SqlFieldName()</a> </dd></dl>

<p>Перекрестные ссылки <a class="el" href="aobject_8cpp-source.html#l00211">aObject::table()</a> и <a class="el" href="asqltable_8h-source.html#l00058">aDataTable::tableName</a>.</p>

</div>
</div><p>
<a class="anchor" name="edc10bd951ca71ada96f48e42d130fe0"></a><!-- doxytag: member="aExtSQL::LastError" ref="edc10bd951ca71ada96f48e42d130fe0" args="() const " -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">QString aExtSQL::LastError           </td>
          <td>(</td>
          <td class="paramname">          </td>
          <td>&nbsp;)&nbsp;</td>
          <td> const<code> [slot]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Возвращает текстовое представление последней ошибки или пустую строку, если ошибок не было. 
<p>
Возвращается текст драйвера базы данных. 
</div>
</div><p>
<hr>Объявления и описания членов классов находятся в файлах:<ul>
<li><a class="el" href="aextsql_8h-source.html">aextsql.h</a><li>aextsql.cpp</ul>
</div>
<hr size="1"><address style="text-align: right;"><small>Документация по Ananas Library. Последние изменения: Sun Feb 1 21:47:15 2009. Создано системой&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address>
</body>
</html>
